package ihm;

import java.util.Enumeration;

import javax.media.j3d.Behavior;
import javax.media.j3d.WakeupOnElapsedTime;
import javax.vecmath.Quat4f;

import obj.Barre;
import outils.Constantes;
import phyzik.solides.PhysiqueSolide;
import wiimote.Controle;
import coeur.Baby;
import coeur.Equipe;

public class Wiimote extends Behavior {
	private static final int DELAI = 100;

	protected WakeupOnElapsedTime reveil;
	protected Equipe equipe;
	protected Barre barreActuelle;
	protected PhysiqueSolide physiqueActuelle;

	public Controle wiimote;

	int i = 0;
	int j = 0;

	public Wiimote(Equipe eq) {
		wiimote = new Controle();
		this.equipe = eq;
		barreActuelle = equipe.getBarres()[0];
		barreActuelle.activer();
		wiimote.allumer(equipe.equipe == 1, equipe.equipe == -1);
		reveil = new WakeupOnElapsedTime(DELAI);
	}

	@Override
	public void initialize() {
		wakeupOn(reveil);
	}

	@Override
	@SuppressWarnings("unchecked")
	public void processStimulus(Enumeration enu) {
		action();
		wakeupOn(reveil);
	}

	private void action() {
		physiqueActuelle = barreActuelle.getPhysique();
		float dec = -(wiimote.tangage / 15);
		if (dec > barreActuelle.I.b)
			dec = barreActuelle.I.b;
		if (dec < barreActuelle.I.a)
			dec = barreActuelle.I.a;
		float ang = (float) (wiimote.roulis * Math.PI) / (2 * 180);
		if (wiimote.boutton == 3) {
			ang = (float) Math.asin(physiqueActuelle.orientation.y);
		}
		if (wiimote.boutton == 4) {
			dec = physiqueActuelle.position.y;
		}
		Quat4f rot = new Quat4f(0f, (float) Math.sin(ang), 0f, (float) Math
				.cos(ang));
		physiqueActuelle.orientation = new Quat4f(rot);
		physiqueActuelle.orientation.normalize();
		physiqueActuelle.position.y = dec;
		if (wiimote.boutton == 5) {
			i++;
			if (i > 1) {
				barreActuelle.desactiver();
				barreActuelle = equipe.barreSuivante();
				barreActuelle.activer();
				i = 0;
			}
		}
		if (wiimote.boutton == 6) {
			j++;
			if (j > 1) {
				barreActuelle.desactiver();
				barreActuelle = equipe.barrePrecedente();
				barreActuelle.activer();
				j = 0;
			}
		}
		if (wiimote.boutton == 7) {
			barreActuelle.desactiver();
			if (Constantes.renduPersonnalise) {
				equipe = Baby.panneauS.equipe2;
			} else {
				equipe = Baby.panneauN.equipe2;
			}
			barreActuelle = equipe.getBarres()[0];
			barreActuelle.activer();
			wiimote.allumer(true, false);
		}
		if (wiimote.boutton == 8) {
			barreActuelle.desactiver();
			if (Constantes.renduPersonnalise) {
				equipe = Baby.panneauS.equipe1;
			} else {
				equipe = Baby.panneauN.equipe1;
			}
			barreActuelle = equipe.getBarres()[0];
			barreActuelle.activer();
			wiimote.allumer(false, true);
		}
		/*
		 * if (wiimote.boutton == 3) {
		 * barreActuelle.allerVersRotation(wiimote.roulis); } else
		 * if(wiimote.boutton == 4) {
		 * barreActuelle.allerVersTranslation(wiimote.tangage); } else {
		 * barreActuelle.allerVersRotation(wiimote.roulis);
		 * barreActuelle.allerVersTranslation(wiimote.tangage); if
		 * (wiimote.boutton == 1) {barreActuelle = equipe.barrePrecedente();}
		 * else if (wiimote.boutton == 2) {barreActuelle =
		 * equipe.barreSuivante();} }
		 */
	}
}
